import scala.quoted.*
import scala.quoted.staging.*
object Test {
  given Compiler = Compiler.make(getClass.getClassLoader)
  def main(args: Array[String]): Unit = withQuotes {
    println('{ true }.value)
    println('{ false }.value)
    println()
    println('{ 3: Byte }.value)
    println('{ 4: Short }.value)
    println('{ 5: Int }.value)
    println('{ 6: Long }.value)
    println('{ 7.1: Float }.value)
    println('{ 8.1: Double }.value)
    println()
    println(('{ 4 }: Expr[4]).value)
    println(('{ 5L }: Expr[5L]).value)
    println(('{ 8.2 }: Expr[8.2]).value)
    println()
    println('{ 'a' }.value)
    println(('{ 'b' }: Expr['b']).value)
    println('{ "abc" }.value)
    println(('{ "def" }: Expr["def"]).value)
    println()
    // TODO?
    // println('{ classOf[String] }.value)
    // println('{ ClassTag(classOf[String]) }.value)
    // println()
    println('{ Seq(1, 2, 3) }.value)
    println('{ scala.Seq(1, 2, 3) }.value)
    println('{ scala.collection.immutable.Seq(1, 2, 3) }.value)
    println()
    println('{ Nil }.value)
    println('{ scala.Nil }.value)
    println('{ scala.collection.immutable.Nil }.value)
    println('{ List.empty[Int] }.value)
    println('{ scala.List.empty[Int] }.value)
    println('{ scala.collection.immutable.List.empty[Int] }.value)
    println('{ List(1, 2, 3) }.value)
    println('{ scala.List(1, 2, 3) }.value)
    println('{ scala.collection.immutable.List(1, 2, 3) }.value)
    println()
    println('{ Set.empty[Int] }.value)
    println('{ scala.collection.immutable.Set.empty[Int] }.value)
    println('{ Set(1, 2, 3) }.value)
    println('{ scala.collection.immutable.Set(1, 2, 3) }.value)
    println()
    println('{ Map(1 -> 2, 2 -> 3) }.value)
    println('{ scala.collection.immutable.Map(1 -> 2, 2 -> 3) }.value)
    println()
    println('{ None }.value)
    println('{ Some(3) }.value)
    println('{ None: Option[Int] }.value)
    println('{ Some(3): Option[Int] }.value)
    println('{ Option(3) }.value)
    println('{ Option[String](null) }.value)
    println()
    println('{ Left(1) }.value)
    println('{ Right(2) }.value)
    println('{ Left(3): Either[Int, Int] }.value)
    println('{ Right(4): Either[Int, Int] }.value)
    println()
    // TODO
    // println('{ BigInt("422") }.value)
    // println('{ BigInt("422", 10) }.value)
    // println('{ BigInt(1, Array[Byte](10,23)) }.value)
    // ...
    println()
    // TODO
    // println('{ BigDecimal("422.54") }.value)
    // ...
    println()
    println('{ StringContext("a", "b") }.value)
    println()
    println('{ EmptyTuple }.value)
    println('{ Tuple1(1) }.value)
    println('{ (1, 2) }.value)
    println('{ 1 -> 2 }.value)
    println('{ (1, 2, 3) }.value)
    println('{ (1, 2, 3, 4) }.value)
    println('{ (1, 2, 3, 4, 5) }.value)
    println('{ (1, 2, 3, 4, 5, 6) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21) }.value)
    println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22) }.value)
    // TODO
    // println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23) }.value)
    // println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24) }.value)
    // println('{ (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25) }.value)
  }
}
